gdk: Add gdk_drag_get_cursor()
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 13 Jan 2016 19:51:19 +0000 (20:51 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 19 Jan 2016 13:17:35 +0000 (14:17 +0100)
This function (most similar to gtk_drag_get_cursor() helps figure out
the right cursor that applies to a given action. To be used by the
various backends.

gdk/gdkdnd.c
gdk/gdkdndprivate.h

index 3a8861a188b4b2d737e0aba72838244ed4ebcea6..e324c18faa32fa99b25f9eb702f4e775af0385f7 100644 (file)
 #include "gdkwindow.h"
 #include "gdkintl.h"
 #include "gdkenumtypes.h"
+#include "gdkcursor.h"
+
+static struct {
+  GdkDragAction action;
+  const gchar  *name;
+  GdkCursor    *cursor;
+} drag_cursors[] = {
+  { GDK_ACTION_DEFAULT, NULL,       NULL },
+  { GDK_ACTION_ASK,     "dnd-ask",  NULL },
+  { GDK_ACTION_COPY,    "dnd-copy", NULL },
+  { GDK_ACTION_MOVE,    "dnd-move", NULL },
+  { GDK_ACTION_LINK,    "dnd-link", NULL },
+  { 0,                  "dnd-none", NULL },
+};
 
 enum {
   CANCEL,
@@ -712,3 +726,18 @@ gdk_drag_context_handle_source_event (GdkEvent *event)
 
   return FALSE;
 }
+
+GdkCursor *
+gdk_drag_get_cursor (GdkDragAction action)
+{
+  gint i;
+
+  for (i = 0 ; i < G_N_ELEMENTS (drag_cursors) - 1; i++)
+    if (drag_cursors[i].action == action)
+      break;
+
+  if (drag_cursors[i].cursor == NULL)
+    drag_cursors[i].cursor = gdk_cursor_new_from_name (gdk_display_get_default (),
+                                                       drag_cursors[i].name);
+  return drag_cursors[i].cursor;
+}
index 2404293b55a5caf55570a73dc57940d381fb9c16..e62435d3f871745ee1c76d6f051c5128d48c5d45 100644 (file)
@@ -112,6 +112,7 @@ void     gdk_drag_context_set_cursor          (GdkDragContext *context,
                                                GdkCursor      *cursor);
 void     gdk_drag_context_cancel              (GdkDragContext *context);
 gboolean gdk_drag_context_handle_source_event (GdkEvent *event);
+GdkCursor * gdk_drag_get_cursor (GdkDragAction action);
 
 G_END_DECLS